package com.example.yin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.yin.common.R;
import com.example.yin.mapper.SingerMapper;
import com.example.yin.model.domain.Singer;
import com.example.yin.model.request.SingerRequest;
import com.example.yin.service.SingerService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;

@Service
public class SingerServiceImpl extends ServiceImpl<SingerMapper, Singer> implements SingerService {

    @Autowired
    private SingerMapper singerMapper;      //私有的SingerMapper类型的实例变量声明

    //更新歌手信息函数
    @Override
    public R updateSingerMsg(SingerRequest updateSingerRequest) {
        Singer singer = new Singer();
        BeanUtils.copyProperties(updateSingerRequest, singer);
        if (singerMapper.updateById(singer) > 0) {              //判断updateById方法的返回值是否大于0
            return R.success("修改成功");                        //若是，返回修改成功信息
        } else {
            return R.error("修改失败");                          //否则，返回修改失败信息
        }
    }

    //更新歌手图片
    @Override
    public R updateSingerPic(MultipartFile avatorFile, int id) {
        String fileName = System.currentTimeMillis() + avatorFile.getOriginalFilename();
        String filePath = System.getProperty("user.dir") + System.getProperty("file.separator") + "img"
                + System.getProperty("file.separator") + "singerPic";
        File file1 = new File(filePath);
        if (!file1.exists()) {                          //判断目录是否存在
            file1.mkdir();                              //如果目录不存在，则尝试创建目录
        }

        File dest = new File(filePath + System.getProperty("file.separator") + fileName);
        String imgPath = "/img/singerPic/" + fileName;
        try {                                               //抛出异常
            avatorFile.transferTo(dest);
        } catch (IOException e) {                           //捕捉异常
            return R.fatal("上传失败" + e.getMessage());     //返回上传失败信息
        }
        Singer singer = new Singer();
        singer.setId(id);
        singer.setPic(imgPath);
        if (singerMapper.updateById(singer) > 0) {             //判断updateById方法的返回值是否大于0
            return R.success("上传成功", imgPath);      //返回上传成功信息
        } else {
            return R.error("上传失败");                         //否则，返回上传失败信息
        }
    }

    //删除歌手
    @Override
    public R deleteSinger(Integer id) {
        if (singerMapper.deleteById(id) > 0) {       //判断deleteById方法的返回值是否大于0
            return R.success("删除成功");             //若是，返回删除成功的信息
        } else {
            return R.error("删除失败");               //否则，返回删除失败的信息
        }
    }

    //所有歌手
    @Override
    public R allSinger() {
        return R.success(null, singerMapper.selectList(null));
    }

    //添加歌手
    @Override
    public R addSinger(SingerRequest addSingerRequest) {
        Singer singer = new Singer();
        BeanUtils.copyProperties(addSingerRequest, singer);
        String pic = "/img/avatorImages/user.jpg";
        singer.setPic(pic);
        if (singerMapper.insert(singer) > 0) {          //判断insert方法的返回值是否大于0
            return R.success("添加成功");                //若是，返回添加成功信息
        } else {
            return R.error("添加失败");                  //否则，返回添加失败信息
        }
    }

    //通过姓名查询歌手信息
    @Override
    public R singerOfName(String name) {
        QueryWrapper<Singer> queryWrapper = new QueryWrapper<>();               //创建了一个QueryWrapper<Singer>对象，用于构建查询条件
        queryWrapper.like("name", name);                                //指定在查询时歌手名称字段与给定的name进行模糊匹配
        return R.success(null, singerMapper.selectList(queryWrapper)); //返回一个成功的R对象，其中的查询结果是通过调用singerMapper.selectList(queryWrapper)方法来查询满足条件的歌手列表
    }

    //通过性别查询歌手信息,它返回一个R对象，其中包含了操作的结果和满足条件的歌手列表
    @Override
    public R singerOfSex(Integer sex) {
        QueryWrapper<Singer> queryWrapper = new QueryWrapper<>();              //创建了一个QueryWrapper<Singer>对象，用于构建查询条件
        queryWrapper.like("sex", sex);                                 //指定在查询时歌手性别字段与给定的sex进行模糊匹配
        return R.success(null, singerMapper.selectList(queryWrapper));//返回一个成功的R对象，其中的查询结果是通过调用singerMapper.selectList(queryWrapper)方法来查询满足条件的歌手列表。
    }
}
